home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1997 January: Mac OS SDK / Dev.CD Jan 97 SDK2.toast / Development Kits (Disc 2) / OpenDoc / OpenDoc Development / Debugging Support / OpenDoc™ Source Code / Core / ValueItr.cpp < prev    next >
Encoding:
C/C++ Source or Header  |  1996-08-28  |  6.7 KB  |  258 lines  |  [TEXT/MPS ]

  1. /*
  2.     File:        ValueItr.cp
  3.  
  4.     Contains:    Implementation of ODValueIterator class
  5.  
  6.     Owned by:    David McCusker
  7.  
  8.     Copyright:    © 1993 - 1995 by Apple Computer, Inc., all rights reserved.
  9.  
  10.     Change History (most recent first):
  11.  
  12.         <12>      8/3/95    RR        #1257260: Collapse B classes. Remove
  13.                                     somInit methods. Don't call IsInitialized
  14.                                     or SubclassResponsibility
  15.         <11>     5/11/95    DM        #1246524: First() and Next() inout->out
  16.                                     requires allocation for value
  17.                                     #1181622: Updated file ownership.
  18.         <10>      5/3/95    DM        IsNotComplete return after try blocks
  19.          <9>      5/2/95    DM        1244864: SOM_TRY blocks needed
  20.          <8>      2/2/95    CG        #1195019:  ValueNameSpace entries are now
  21.                                     copied in and out instead of pointers being
  22.                                     passed around.
  23.          <7>     1/23/95    CG        #1195019: ValueIterator methods now take
  24.                                     ODByteArray parameter instead of ODPtr.
  25.          <6>     9/14/94    jpa        Don't include MemDebg.h [1186692]
  26.          <5>     8/31/94    TÇ        #1183129, #1183116, #1183119, #1183111:
  27.                                     Lots of ErrorCode cleanup.
  28.          <4>     8/24/94    CG        #1181622: Updated file ownership.
  29.          <3>     8/17/94    CG        #1181440: No more magic nums, no throwing,
  30.                                     delete -> ODDeleteObject.
  31.          <2>      8/4/94    eeh        bug 1179044: pass null heap id in
  32.                                     ODValueIteratorNext
  33.          <1>     7/29/94    CG        first checked in
  34.          <1>     6/24/94    CG        first checked in
  35.          <0>     6/24/94    SV        SOMverted
  36.          <3>      5/9/94    MB        #1162181: Changes necessary to install MMM.
  37.          <2>     3/15/94    MB        Changes to support SCpp/ASLM builds,
  38.                                     #1150864.
  39.          <2>      2/8/94    TÇ        Throw -> THROW & some code clean up
  40.          <1>     1/14/94    CG        first checked in
  41.     To Do:
  42. */
  43.  
  44.  
  45. #ifndef _PLFMDEF_
  46. #include "PlfmDef.h"
  47. #endif
  48.  
  49. #ifndef _EXCEPT_
  50. #include "Except.h"
  51. #endif
  52.  
  53.  
  54. #define ODValueIterator_Class_Source
  55. #define VARIABLE_MACROS
  56. #include <ValueItr.xih>
  57.  
  58. #ifndef SOM_ODValueNameSpace_xh
  59. #include <ValueNS.xh>
  60. #endif
  61.  
  62. //#ifndef _AEHSHTBL_
  63. //#include "AEHshTbl.h"
  64. //#endif
  65.  
  66. #ifndef _STRHSHTB_
  67. #include "StrHshTb.h"
  68. #endif
  69.  
  70. #ifndef _ODMEMORY_
  71. #include "ODMemory.h"
  72. #endif
  73.  
  74. #ifndef _ISOSTR_
  75. #include "ISOStr.h"
  76. #endif
  77.  
  78. #ifndef _ODUTILS_
  79. #include <ODUtils.h>
  80. #endif
  81.  
  82. #ifndef _BARRAY_
  83. #include <BArray.h>
  84. #endif
  85.  
  86. #pragma segment ODValueIterator
  87.  
  88. //==============================================================================
  89. // ODValueIterator
  90. //
  91. //    For all GetNext...
  92. //    kODTrue is returned if an entry was found, kODFalse otherwise.
  93. //    kODErrWrongNameSpaceType is thrown if the user attempts to use a function
  94. //    that does not match the type that the ODNameSpace was initialized
  95. //    with.
  96. //==============================================================================
  97.  
  98. //------------------------------------------------------------------------------
  99. // ODValueIterator: ~ODValueIterator
  100. //------------------------------------------------------------------------------
  101.  
  102. SOM_Scope void  SOMLINK ODValueIteratorsomUninit(ODValueIterator *somSelf)
  103. {
  104.     ODValueIteratorData *somThis = ODValueIteratorGetData(somSelf);
  105.     ODValueIteratorMethodDebug("ODValueIterator","somUninit");
  106.  
  107.     //if (_fAEHashTableIterator)
  108.     //    delete _fAEHashTableIterator;
  109.     if (_fStrHashIterator)
  110.         ODDeleteObject( _fStrHashIterator );
  111.  
  112.     ODValueIterator_parent_ODObject_somUninit(somSelf);
  113. }
  114.  
  115. //------------------------------------------------------------------------------
  116. // ODValueIterator: InitValueIterator
  117. //------------------------------------------------------------------------------
  118.  
  119. SOM_Scope void  SOMLINK ODValueIteratorInitValueIterator(ODValueIterator *somSelf, Environment *ev,
  120.         ODValueNameSpace* nameSpace)
  121. {
  122.     ODValueIteratorData *somThis = ODValueIteratorGetData(somSelf);
  123.     ODValueIteratorMethodDebug("ODValueIterator","InitValueIterator");
  124.  
  125.     SOM_TRY
  126.     
  127.         somSelf->InitObject(ev);
  128.         _fNameSpace = nameSpace;
  129.         _fStrHashIterator = kODNULL;
  130.         //_fAEHashTableIterator = kODNULL;
  131.         
  132.     SOM_CATCH_ALL
  133.     SOM_ENDTRY
  134. }
  135.  
  136. //------------------------------------------------------------------------------
  137. // ODValueIterator: First
  138. //------------------------------------------------------------------------------
  139.  
  140. SOM_Scope void  SOMLINK ODValueIteratorFirst(ODValueIterator *somSelf, Environment *ev,
  141.         ODISOStr* key, ODByteArray* value)
  142. {
  143.     ODValueIteratorData *somThis = ODValueIteratorGetData(somSelf);
  144.     ODValueIteratorMethodDebug("ODValueIterator","First");
  145.  
  146.     *key = kODNULL;
  147.     value->_buffer = kODNULL;
  148.     value->_maximum = value->_length = 0;
  149.     
  150.     SOM_TRY
  151.  
  152.     if (!_fStrHashIterator)
  153.         _fStrHashIterator = new StringHashTableIterator
  154.                                 (_fNameSpace->GetHashTable(ev));
  155.     //THROW_IF_NULL(_fStrHashIterator);
  156.  
  157.     if (_fStrHashIterator)
  158.     {
  159.         ODULong    len;
  160.         ODUByte*    string;
  161.         ODPtr buffer = kODNULL;
  162.         ODULong size = 0;
  163.         _fStrHashIterator->First(&string, &len ,&buffer, &size);
  164.     
  165.         if (_fStrHashIterator->IsNotComplete())
  166.         {
  167.             *key = (ODISOStr)ODNewPtr(len + 1, kDefaultHeapID);
  168.             ODBlockMove((Ptr)string, *key, len);
  169.             (*key)[len] = 0;
  170.         
  171.             value->_length = value->_maximum = size;
  172.             if ( size > 0 )
  173.             {
  174.                 value->_buffer = (octet*) ODNewPtr(size, kDefaultHeapID);
  175.                 ODBlockMove( buffer, value->_buffer, size);
  176.             }
  177.         }
  178.     }
  179.     
  180.     SOM_CATCH_ALL
  181.     SOM_ENDTRY
  182. }
  183.  
  184. //------------------------------------------------------------------------------
  185. // ODValueIterator: Next
  186. //------------------------------------------------------------------------------
  187.  
  188. SOM_Scope void  SOMLINK ODValueIteratorNext(ODValueIterator *somSelf, Environment *ev,
  189.         ODISOStr* key, ODByteArray* value)
  190. {
  191.     ODValueIteratorData *somThis = ODValueIteratorGetData(somSelf);
  192.     ODValueIteratorMethodDebug("ODValueIterator","Next");
  193.  
  194.     *key = kODNULL;
  195.     value->_buffer = kODNULL;
  196.     value->_maximum = value->_length = 0;
  197.  
  198.     SOM_TRY
  199.  
  200. //    if ( !ODValidateAllHeaps())
  201. //        return ;
  202.  
  203.     ODUByte*    string;
  204.     ODULong    len;
  205.     ODPtr buffer = kODNULL;
  206.     ODULong size = 0;
  207.  
  208.     _fStrHashIterator->Next(&string, &len, &buffer, &size);
  209.  
  210. //    if ( !ODValidateAllHeaps())
  211. //        return ;
  212.  
  213.     if (_fStrHashIterator->IsNotComplete())
  214.     {
  215. //        if ( !ODValidateAllHeaps())
  216. //            return ;
  217.  
  218.         *key = (ODISOStr)ODNewPtr(len + 1, kODNULL);
  219.         ODBlockMove((Ptr)string, *key, len);
  220.         (*key)[len] = 0;
  221.         
  222.         value->_length = value->_maximum = size;
  223.         if ( size > 0 )
  224.         {
  225.             value->_buffer = (octet*) ODNewPtr(size, kDefaultHeapID);
  226.             ODBlockMove( buffer, value->_buffer, size);
  227.         }
  228.     }
  229.     
  230.     SOM_CATCH_ALL
  231.     SOM_ENDTRY
  232. }
  233.  
  234. //------------------------------------------------------------------------------
  235. // ODValueIterator: IsNotComplete
  236. //------------------------------------------------------------------------------
  237.  
  238. SOM_Scope ODBoolean  SOMLINK ODValueIteratorIsNotComplete(ODValueIterator *somSelf, Environment *ev)
  239. {
  240.     ODValueIteratorData *somThis = ODValueIteratorGetData(somSelf);
  241.     ODValueIteratorMethodDebug("ODValueIterator","IsNotComplete");
  242.     
  243.     ODBoolean notComplete = kODFalse;
  244.  
  245.     SOM_TRY
  246.  
  247.     if (_fStrHashIterator)
  248.         notComplete = _fStrHashIterator->IsNotComplete();
  249.     
  250.     SOM_CATCH_ALL
  251.     SOM_ENDTRY
  252.     
  253.     return notComplete;
  254. }
  255.  
  256.  
  257.  
  258.